home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
aminet
/
comm
/
misc
/
zvm1_19.lha
/
zvm.doc
< prev
next >
Wrap
Text File
|
1993-04-24
|
41KB
|
965 lines
/* $Header: pd:zvmRCS/zvm.doc,v 1.6 1993/04/19 18:40:06 rvillari Exp rvillari $ */
PLEASE READ THE HISTORY SECTION AT THE END OF THIS FILE IF YOU'VE USED
THIS PROGRAM BEFORE!!!
THERE IS A NEW REQUIRED ASSIGN (VOICETEMP:). SEE THE INSTALLATION
INSTRUCTIONS AGAIN.
IF YOU'VE USED THIS PROGRAM BEFORE AND YOU WANT TO KEEP YOUR OLD
MESSAGES, MAKE SURE YOU UNARCHIVE THIS IN A DIFFERENT DIRECTORY THAN
YOUR OLD ONE, THEN COPY THE NEW FILES TO VOICE:. THIS RELEASE CONTAINS
EMPTY MESSAGES FOR EACH OF THE MESSAGES THAT NEEDS TO BE CUSTOMIZED.
--------------------------------------------------------------------------
DESCRIPTION
This is ZVM 1.19, a voice module that CAN be used with GPFax2.21+
(GPFax is not required!). In short, it allows you to use your ZyXEL
modem as an answering machine. You can retrieve your messages
remotely and locally, play messages through the modem's internal
speaker, through the telephone line, or through the Amiga's sound
system. It also detects when a fax is calling up and lets GPFax
handle the call.
It has a fully gadgetized user interface. All the keyboard shortcuts
work now!
It has an AREXX port. And you can program the way ZVM handles a call,
handles a fax, or handles a 'silent answer' situation. Given all the
arexx commands available, you should be able to make your own
voicemail system. Since there is no tutorial, you will most likely
have to learn how to program the system by example (that's how I do
most of my Amiga programming). Hopefully, when I have more time, I
will take the time out to actually write a tutorial on how to use the
arexx functions I provide. Note that there is a section in this .doc
file which describes the functions.
REQUIREMENTS
This works on my A3000 running WB2.04 (it won't run on 1.3). It
should run fine on a 68000 machine. CELP is the best choice, if you
have one of the Zyxel Plus or S models. ADPCM2 is really good enough
for most purposes (I use it all the time).
AREXX IS REQUIRED!
LIMITATIONS: As of this time, there is no CELP decoder. Therefore,
you cannot play back any files that have been recorded with the CELP
compression method. I strongly suggest that you stick with ADPCM2
until this is fixed. ADPCM3 also doesn't seem to work reliably, even
on accelerated machines. I really can't figure out what's wrong -- my
theory is that the Zyxel modem's buffer gets overrun if the Amiga
can't stop sending stuff fast enough. Or, the Amiga just can't send
stuff fast enough. I don't know. UPDATE: Lance just told me that
with the 6.00 roms, ADPCM3 works for him (90% of the time).
WARNING: Do not mix compression levels for different files. You should
always use just one compression type. For example, when using CELP,
don't record any of the outgoing messages using ADPCM2. The same
goes for ADPCM3. The reason for this is that the current version
of ZVM hangs up the line when switching compressions. The 6.00 ROMS
don't seem to like the way I was doing the switching before, which
caused incompatibility problems, so I switched to the old way of
dropping the line, switching compressions, then picking up the line
again.
My modem's ROM is 5.02. Anything higher should work. Type in ATI0 or
ATI1 in some terminal program to find out what ROM version you have.
As of 5.02 (what I have), the decoding of the touch tones is not very
reliable. Hence, you need to press the keys for a long time before
the modem recognizes them. I've been told that the higher ROM
versions work much better.
This version uses Topaz 8, since many people complained about the HUGE
window sizes.
AUTHOR
This program was written and Copyright (C) 1993 by Al Villarica of
BuglesSoft. This software is freely distributable. You can give this
program away to anyone, but make sure the distribution is complete. Also,
you cannot charge more than a copying fee for the program.
I can be reached at:
rvillari@cat.syr.edu
or
Al Villarica
104 Roney Lane, #22
Syracuse, NY 13210
If you are requesting newer versions of the program by mail, make sure
you include a diskette, your address, the version number you already
have, and MONEY to cover the cost of shipping the disk back (for those
in the US, a self-address stamped envelope with enough stamps for the
disk is fine). I'm not sure what kind of payment people outside the
US can send, but make sure I can cash it in a US bank and there's
enough money left after cashing it to send the disk back. Reason?
Since I earn nothing from this program, I would like to not have to
spend for it either.
NOT BUGLESS?
Please send any bug reports or features you would like included to
either address (Email is faster). Here is a bug report template to
help you:
ZVM Version: 1.19
Zyxel ROM version: 6.00
Machine: A3000
Chip RAM: 2MB
Fast RAM: 2MB
CPU: 68030
Compression Used: ADPCM2
Status: RING
Errors: CONNECT
What you were doing when it happened: I just clicked on the play gadget
in the play window.
Problem or Suggestion: Program can't play back files. Make window
smaller. blah blah blah
Note: The Status and Errors fields above should be copied directly from
the Status and Errors fields in the main window of ZVM.
ACKNOWLEDGEMENTS
Mike Sinz for SimpleRexx and Enforcer
Jan van den Baard for GadToolsBox 1.4 (The Sequel)
Dr. Greg Perry of GPSoft for GPFax
SAS for SAS/C
David Gay for Emacs port
ZyXEL for their modem and the conversion routines from ADPCM2/3 to something
Commodore Amiga for their iff routines
Dave Schreiber for DSound (included with this release without permission
but since it was public domain, and I included the .doc file,
and I acknowledged the author, maybe it's alright. If not,
someone tell me and I'll kill it from the archive.)
David Junod for FindLine
BETA TESTERS
Lance Gibb
Michael Breger
Dirk Melchers
James Atwill - thanks for the asl code!
Christian Stelter
Florian Keck - thanks for the icon!
GETTING UPDATES
ZVM is a program that continually grows. From the first version (1.0),
I've added so many new features. I would like everyone to have the
latest version.
For German users, Christian Stelter has volunteered to make updates
available through fidonet. He says that the following info. is all that
is needed to get the latest version:
DEEP THOUGH BBS 2:241/2013.0
MAGIC ZVM
Or, I will be uploading the latest version to one of the aminet sites,
so it should be available within a couple of days after uploading on
any of its mirrors. I know of two aminet sites:
oes.orst.edu
amiga.physik.unizh.ch
I will also try to ship the latest versions to the Fish disks.
-------------------------------------------------------------------------------
A. Setting up
1. Unarchive the archive. Assign voice: to the directory which contains
ZVM. You will need to put this ``assign'' into your user-startup file. You
will also need to assign voicetemp: to some scratch directory. voicetemp:
is where ZVM will put a temporary file when it plays a ZVM file through
the Amiga's sound system. If you've got lots of RAM, assign voicetemp: to
ram:
Ex:
assign voice: work:zvm
assign voicetemp: ram:
2. Run GPFax and go into the options menu and make sure that it is
set up to be in SHARED serial mode. You also need to go into the
ENVIRONMENT window and change the modem initialization string. It
probably currently reads AAT&FE0...Remove the &F. This is because
the &F hangs up the modem, and, at the time we issue a RECFAX to
GPFax, the modem is already ON-HOOK. You don't want it to hang up and
then pick it up again (on some phones, this could be treated as a
flash, causing it to switch to another "line").
3a. To run the program, get into a CLI shell and type the following
(or put it in a script). The script zvmandgpfax assumes that there is
an assign called gpfax: which points to the directory where the GPFax
executable resides.
cd voice:
execute zvmandgpfax
3b. Arguments to ZVM
zvm [serialdevice unitnumber]
- serialdevice is the name of the serial device you want
- unitnumber is the unit number of the serial device you want
If you don't specify the serialdevice and the unitnumber,
"serial.device" and 0 are assumed, respectively.
3c. Click on the zvm icon or the zvmandgpfax icon to start ZVM.
zvmandgpfax will first load gpfax (you need to make an assign for gpfax:),
put it in unlisten mode, then it will run ZVM.
4. CUSTOMIZE your program by recording the appropriate outgoing
messages. You need to click on the Setup gadget to get into the Setup
Window.
-------------------------------------------------------------------------------
B. Buttons:
Voice Module Window
1. Calls tells you the number of messages you have waiting. Faxes
tells you the number of fax attempts. Saved tells you the number
of saved messages you have. The CLR gadgets beside the fax status
clears the fax log. You need the Fax CLR button because ZVM only
tells you the number of faxes that came in. You need to view the
faxes through GPFax. LIMITATION -- you can have up to 45 entries in
each of the logs. Any more than that and the program will throw away
the top of the list, one at a time.
2. Play (beside Calls) - Plays the incoming messages over the telephone
line, the Amiga's sound system, or the modem speaker
Another window will pop up that allows you to.
3. Play (beside Saved) - Playes the saved messages over the telephone
line, the Amiga's sound system, or the modem speaker. Another
window will pop up to tell you what to do next.
4. Rings - Shows you the number of rings the program is waiting for.
Use the Setup window to change this.
5. Comp - Shows you the current compression that will be used for
new messages.
6. Status - This status box shows you some status information. Normally,
it tells you what the program is doing.
7. Errors - Tries to show you the commands sent to the modem and the
results read. It also gives you the last error, if any.
8. Setup - Click on this to get into the setup window.
9. Answer Fax - If you have GPFax2.21 or greater, this will let it answer
the call as a fax.
10. Answer Call - Force the modem to answer the call as an automatic
voice/fax machine.
11. Record Conv - Records the conversation and puts it in the Saved log.
12. Unlisten - Puts the program in unlisten mode.
13. Close Serial - Closes the serial port so other programs can use it.
14. Quit - Quit.
Play Window
1. Play - Plays the message displayed on the bottom line.
2. Archive - Transfers the selected message to the Saved log. If you're
already in the Saved log, this just moves the marked entries to the bottom.
3. Delete - Marks the message for deletion.
4. Save IFF - Saves the message as an IFF file. An ASL requester pops
up to ask you for a file name. Try not to save anything in the voice:voicein
or the voice:voices directory with a ".iff" extension (they will be deleted
automatically).
5. Done - Commits the changes you requested (delete or archive).
6. DClick= - You can double click on the list view items. This tells ZVM
what the double click means.
7. To - The output device you want to play your file through.
Every time you delete or archive something, it is marked with an 'a'
or a 'd' respectively. You can 'undelete' or 'unarchive' them by
clicking on Archive or Delete respectively (in other words, they are
toggles). Only when you click on Done are the changes committed. To
make things easier for you, there's a DClick= cycle button. Any time
you double click on one of the listview items, the action displayed in
this button is performed. This way, you can quickly delete a bunch of
messages by clicking on DClick= until it says "Delete", then double
click on all the messages you want to delete.
Setup Window
1. Threshold - This adjusts the modem's silence detection threshold. A
high value means that the modem treats noisier conditions as "silence". A
low value means that the modem treats quieter conditions as "silence".
2. Length - The number of seconds required for the modem to be detecting
"silence" before it actually reports it.
3. Comp - Select the compression you desire. ADPCM2 uses less disk space
and computing resources. This is the preferred setting, unless you
have CELP. ADPCM3 won't run on an unaccelerated Amiga.
4. Rings - Click on this for the desired number of rings you want before
I will answer the call. "Toll Saver" will let the modem answer in 2 rings
if there are messages, and 4 rings if there are none.
5. Rec Length - The max. recording time for incoming calls
and outgoing messages. Record Conv has a maximum of 3 minutes.
6. Amiga Vol - The volume you want when playing messages through the amiga
sound system.
7. Quiet Modem - Issues an AT&FL0 if checked, otherwise, it sends an AT&F.
8. Beep Cmd - An Arexx command you want sent when you have messages. The default
should be: alertmessages
9a. Fax Cmd - An Arexx command you want sent when the modem detects a fax
tone or the caller manually requests a fax. Also see Has Fax option. The
default should be: handlefax
9b. Has Fax - Check this if you have a fax program and you want the
Fax Cmd to be sent when faxes are requested.
10. Password - Enter a 4 digit password (it has to be 4 digits!) for
accessing the messages from another telephone.
11. Record - Records a message. An ASL file requester pops up to ask you
for a filename.
12. From - Select external mic or telephone line. On Zyxels, you can
connect a telephone handset to the "Line" input of the modem. Then,
you can speak into the "EAR" phone and use it like an External Mic.
WARNING: Don't use the External Mic option when the modem is plugged
into the phone line!
On my system, the modem and a telphone are plugged in parallel. You should
be able to hear a dial tone even if the modem picks up the line.
When recording over the telephone line, I suggest you press one of the
telephone keys to get rid of the dial tone first! When you're done
recording, click on the Stop gadget that pops up. See section
"Messages to customize" at the end of this documentation file.
13. Play - Plays the message named by the Message cycle gadget
through the telephone line or the modem speaker.
14. To - Select modem speaker, telephone line, or the Amiga's sound
system.
15. Zip Window - Check this if you want the program to automatically
start up in Zipped form (effectively clicking on the zoom gadget for you).
16. Snd Cmd - An arexx command that is sent when you try to play
a message through the amiga sound system. The default is
playamiga.
17a. Call Cmd - An arexx command that is sent when ZVM answers a call.
The default is handlecall.
17b. ARexx on Call - Check this if you want to handle calls via arexx.
At this time, the arexx program I wrote (largely a duplicate of the C
code) is not tested completely. I've tested most features but there's
always a possiblity that there are bugs. When it is completely tested,
I will REMOVE the C equivalent.
18a. SA Rings - The minimum number of rings required before ZVM will
consider a call to be answerable by the silent answer capability. See 18b.
18b. SA Cmd - An arexx script that is called in "Silent Answer" mode.
Currently, the script is very small and simple. And, it's not really silent.
"What is silent answer?", you ask. When someone calls you up and you're
at home AND ZVM is active AND the minimum number of rings is seen by ZVM,
ZVM will pick up the phone and run the arexx command specified by the
SA Cmd field in the setup window. This allows you, for example, to have
a simple kind of remote transfer capability provided by most faxes.
For example, supposing someone calls you up and you pick the phone up.
Then, he says that he wants to send a fax. Without silent answer, you
would have to get out of bed, go to your trusty Amiga, and click on
Answer Fax in the ZVM window. With silent answer, you would just
have to press 2 on your touch tone phone. Or, if the modem hears the
fax tone, it will automatically start up the fax program.
Note that silent answer gets activated only if you pick up the phone
before ZVM does. If ZVM picks up the phone when it hears the number
of rings specified by the Rings gadget, it will answer the phone using
the Call Cmd arexx script, not the SA Cmd arexx script. If you want
to disable the silent answer feature, just set SA Rings to a number
greater than or equal to the number in the Rings gadget.
"What does the current SA Cmd do?", you ask again. I said the current
version of handlesilentanswer.zvm does very little. It first beeps
a short high pitched tone (so you know ZVM is alive and kicking), then
does nothing but wait for one of two events. You could press the number
2 and ZVM will activate the fax program. Or, if ZVM hears the fax tone,
it will start the fax program automatically. It will only wait for
these two events for a maximum of 30 seconds. If none of those events
occurs, it will beep again and hang up. If someone wants to add to the
current script, please do so. Another nifty feature might be to record
the incoming call when you press 1 or something. Basically, you can
do anything you want.
WARNING: You should only use silent answer if the telephone you use to
pick up the phone is in parallel with the modem. Otherwise, you would
get cut off if the Zyxel answers the phone when processing the silent
answer script. SA Rings is set at 2 by default. This means that it
is most likely ACTIVE! (assuming of course that Rings is higher than
this).
19. Done - Click on this when you're done fiddling with the setup window.
-------------------------------------------------------------------------------
C. Calling from the outside:
When a person calls from the outside, ZVM will give instructions on
what to press. It asks him to press 2 to send a fax or "wait for the
beep...". At this time, he can also press 9 to retrieve his messages.
It's a hidden option most callers don't need to know. Note that if he
turns off the Has Fax option, it will not accept 2 at this time.
He can also press 9 to receive his messages or 2 to send a fax while
the program is recording a message! But, anything prior to pressing
those numbers counts as a message. This way, someone can leave a
message explaining a fax, and then send the fax.
After the caller leaves his message and hangs up, the modem will keep
on recording until it hears "silence", a busy tone, or a phone
keypress. If it doesn't hear any of those, it will record for up to
50 seconds. You can set the max. recording time using the parameters
described above. If your phone system doesn't go into silence
or a busy tone when a caller hangs up, just ask him to press the '*'
symbol after leaving a message. This signals the program to stop
recording and issue the "Goodbye" message.
If you press 9, you will be instructed to enter a 4 digit password.
If it matches the Password string gadget in the setup section, you will
be granted access. After each message is played, you will then be asked
to either 1) delete the message, 2) keep it and go onto the next one, or
3) play it again.
-------------------------------------------------------------------------------
D. AREXX port:
The AREXX port is called VOICEMAIL1.
Commands while program is waiting for calls:
1a. UNLISTEN - Make the program not listen to the serial port. This is
useful if you want to run a term program but don't want to quit ZVM.
1b. CLOSESERIAL - Close the serial port.
2a. LISTEN - Only valid when the program is UNLISTEN'ed.
2b. OPENSERIAL - Open the serial port. Only valid when the program has
actually closed the serial port.
3. QUIT - Quit.
4. ANSWERFAX - Force ZVM to answer the call as a fax.
5. ANSWERCALL - Force ZVM to answer the call as an automatic voice/fax machine.
6. RECORDCONV - Record conversation
7. PLAYINCOMING - Same as clicking on the Play Incoming gadget in the
Voice Module window.
8. PLAYARCHIVE - Same as clicking on the Play Archive gadget.
I use dnet a lot, so I have this simple script that works for me:
failat 20
sys:rexxc/rx >nil: <nil: "address voicemail1 unlisten"
dnet >nil: nil: -X -Z2 ;<---put your dnet parameters here
wait >nil: <nil: 5
sys:rexxc/rx >nil: <nil: "address voicemail1 listen"
---------------------------------------------------------------------------------
Commands while program is answering a fax, answering a call, or in unlisten mode.
Some things you should know: Most of the functions return a status
(status.keyDetected, status.faxDetected, etc.) if they aborted for some
reason. For example playVoice will return status.keyDetected if, while
playing a file, the user presses a DTMF key. Anyway, the best way
to learn how to program ZVM is by looking at the examples in handlecall.zvm
and handlefax.zvm. Or, ask me.
Note: Each function you create needs to 'EXPOSE status. mode.' You will only
need to do this if you use the PROCEDURE keyword.
YOU SHOULD NOT ACCESS ZVM BY SENDING AREXX COMMANDS TO ZVM ITSELF.
INSTEAD, USE THE AREXX FUNCTIONS (STUBS) TO COMMUNICATE WITH ZVM.
HERE IS A LIST OF FUNCTIONS:
playVoice(fileName)
Plays fileName over the telephone line. Stops if the user presses
a DTMF key.
recordVoice(fileName)
Records fileName with the same settings as in the Setup window (length
of message, silence detection levels, etc.)
presentMenu(numberOfKeys, choiceFileName, badChoiceFileName, timeOut,
validChoices, numBadChoicesAllowed)
This presents a simple menu to the caller. numberOfKeys is the
number of keys that makes up a good choice. choiceFileName is the name
of the file for the menu. badChoiceFileName is the name of the file
that will be played if the user enters a bad choice. timeOut is the
number of seconds before playing the choiceFileName again. validChoices
is a string of characters which are valid choices. numBadChoicesAllowed
is the nubmer of bad choices or timeouts presentMenu will allow before
exiting. This is an AREXX script. It's a good example of how to do things.
password()
Returns the password in the setup window.
hasFax()
Returns 1 if the hasFax option in the setup window is checked.
0 otherwise.
playBeep(tone1, tone2, duration)
Beeps 2 tones. Put a 0 for tone2 if you don't want two
simultaneous beeps. duration is in tenths of seconds, I think.
readNKeys(numKeys, timeOut)
Reads numKeys DTMF characters or times out.
read1Key(timeOut)
Reads 1 DTMF character or times out.
readKeysUntil(terminatingCharacter, maxCharacters, timeOut)
Reads a DTMF sequence, up to maxCharacters or until it
gets the terminatingCharacter (0..9, * or #) or until
a timeout occurs.
readLine(timeOut)
Reads a string from the modem. timeOut is in seconds. This returns
the string in line (not RESULT).
writeLine(line)
Writes out a newline terminated string to the modem.
flushPhoneBuffer()
ZVM maintains a small buffer for incoming phone key presses. For example,
if you're playing a voice file and the user presses a DTMF key, it gets put in
the phone buffer. Sometimes, you will want to ignore that keypress. So, call
this function.
listen()
Should be the last thing in your script for a normal return. This
will make ZVM start listening for RINGS again (and hang up the line).
dropLine()
Hangs up the phone and puts the modem in a state that accepts AT commands.
atCommands()
Doesn't hang up the phone, but puts the modem in a state that accepts AT
commands. Ideal for receiving faxes while the line is still up. BUT, if
you try to playvoice or use any of the voice commands, ZVM WILL drop the line
first. So, there is no way to use the serial port and still maintain a connection.
NOTE that if you use any fax program, it will hang up the line for you anyway.
use19200()
Sets the serial port to 19200, n, 8, 1, 7wire handshaking.
This is needed if you're going to receive faxes. To get the modem
to 'sync' to the new speed, the modem should be ready to accept AT commands
(either by using dropLine() or atCommands()) AND you should send it
at least one AT command.
answerFax()
Lets ZVM answer a fax. This eventually calls another arexx script
called handlefax.zvm. But, don't call that script yourself. ZVM does
special magic before calling that script.
cTime()
Returns a C compatible time (number of seconds since Jan 1, 1970).
This is what you need to feed into the addLogEntry(...) function call as
the actualTime parameter. This should be the time the call came in.
addLogEntry(fileName, actualTime, duration)
ZVM maintains a log for incoming calls. fileName is the name
of the file that you recorded the incoming call as. actualTime is a
C compatible time when the call came in. duration is the length of the
incoming call.
setLogEntryStatus(logEntryNumber, logEntryStatus)
Allows you to change the status of a log entry. Possiblities
for logEntryStatus are 'd' = delete, 'a' = archive, and ' ' = do nothing.
getLogEntryData(logEntryNumber)
Gets the data associated with a log entry number.
getLogEntryFileName(logEntryNumber)
Gets the filename associated with a log entry number.
getNumVoiceMessages()
Gets the number of messages in the incoming log. You should
make sure that you don't try to access (via the setLogEntryStatus,
the getLogEntryFileName, or the getLogEntryData) out of bounds. Note that
this is 1 higher than the maximum you can access. If there is 1 message
waiting, this function will return 1, but you can get data or set data
as log entry 0 (C style).
displayError(error)
This displays the string in the Errors field in the main window.
displayStatus(status)
This displays the string in the Status field in the main window.
setLastError(status, error)
This should be one of the last things in your script. It will
probably bring up a timed window displaying the error. status should
be status.normal, status.keyDetected, status.quietDetected,
status.silenceDetected, status.faxDetected, status.busyDetected,
status.timedOut, status.signalDetected, or status.error. The stem status.
is defined for you by the doInitializations function which is called
at the beginning of handlecall.zvm. This effectively does a listen() also.
-------------------------------------------------------------------------------
E. Messages you have to customize:
YOU NEED TO TYPE THESE MESSAGES INTO THE FILE REQUESTER EXACTLY AS WRITTEN.
Here are the things you need to say when recording these messages in
the Setup Window.
1. Wait for Beep = "This is ???-????. Press 2 to send a fax or wait for
the beep then leave your message. Press the * symbol to end your
call."
or, if you used the NOFAX option,
"This is ???-????. Wait for the beep then leave your message. Press the *
symbol to end your call."
2. Retrieve or Fax = "Press 2 to send a fax or 9 to retrieve your messages."
or, if you used the NOFAX option,
"Press 9 to retrieve your messages."
NOTE: This message gets played if the caller presses a key that doesn't
activate any function. You may choose to not mention the "9" key (put
in something funny like "What do you think this is, a voicemail system?").
Do what you like.
3. Enter Password = "Enter your 4 digit password."
4. Bad Password = "You entered a bad password."
5. Play or Delete = "Enter 1 to delete this message, 2 to keep it, or 3 to play
it again, or the * symbol to end your call."
6. Timed Out = "You exceeded the time limit for entering your choice."
7. Bad Choice = "You entered a bad choice."
8. No Message = "There are no more messages."
9. Goodbye = "Bye now!"
----------------------------------------------------------------------------------
F. Iff2Adpcm:
This is a program which converts an iff 8svx file to something playable
by ZVM. To invoke it, type in
iff2adpcm ifffilename 2 zvmfilename /* adpcm2 */
or
iff2adpcm ifffilename 3 zvmfilename /* adpcm3 */
Note that it doesn't do any massaging of sampling rates. ZVM plays
stuff back at 9600 samples per second. Therefore, if your samples are
sampled around that sampling rate, it should play back fine. If it's
sampled at 19200, it would play back sloooow on the Zyxel. If it's
sampled at 4800, it would play back fast. Maybe in a future version,
I will try to make adjustments in the sampling rate by interpolation
or extrapolation. Maybe.
----------------------------------------------------------------------------------
To Do
- Set process up so that disk-full errors go away quietly and not
bring up a stupid requester
- Make a scheduler and maybe a log for that scheduler.
- Integrate faxes with calls. This will require an update
to the Messages window, among other things.
- Add the ability to put in comments, caller id, telephone numbers,
and callback numbers.
- Tutorial for making a voicemail program
- Make the iconified thing at the same coordinates as the actual
program. Save it across invocations!
- Maybe switch to zyxel's format. Shouldn't be too hard. Could write
a converter instead. ZVM's format is VERY simple. The first
byte is the compression. The rest is the data. 1 = CELP,
2 = ADPCM2, and 3 = ADPCM3.
- Maybe send out the program with LINE debugging on to help us track
down enforcer hits reported by other people (so far, no one
has reported enforcer hits)
- Make the receive buffer user-programmable so that there is a smaller
chance for buffer overflow for non-accelerated machines
- Find out why zvm doesn't work with duart.device
- Add voicein: and voices: assigns instead of hardwiring voice:voicein
and voice:voices
- User customizable date and time format anywhere it is necessary
- Smaller 'iconified' look using the window title for the number
of messages and number of faxes
- Use GPFax's viewfax for viewing incoming faxes. Needs to query
GPFax for the name of the fax file when we receive an incoming
fax. This needs more thought since it may lock us into
a particular fax program
- Try to highlight things in the list view for playing messages
possible- Add a random button which will pick at random from a set
of messages
possible- Play back the message's time and date
- Caller ID (can't work on it until Syracuse gets CID!)
done - Use a file requester instead of hardwiring the Save IFF option
done - Use a file requester for recording customizable messages
so we can easily add more kinds of messages
done - User selectable max. recording time
done - User selectable silence detection time and silence detection level
done - Better UI for accessing the messages (use a ListView gadget)
done - Decoder for ADPCM2 and Encoder
- Figure out what's wrong with ADPCM3
done - Work with other FAX programs
- Work better with workbench and tooltypes
done - Add '*' as an option to end a call
- Add '1' as an option to kill initial message for 'regular' callers
- Poor man's CID - maybe we can also ask
for the caller's phone number at that time!
- Automatic delivery of messages
- Scheduling of messages to go out
- Maintenance mode from outside
done - Allow DTMF keys to run AREXX scripts.
done - Archive messages
done - Import/Export IFF files
done - Record conversation
done - If someone picks up the phone before ZVM does, it should also pick
it up to see if the caller wants a fax, etc. In other words,
it should support some kind of remote transfer (or silent
answer).
- Distinctive ring
done - Use AREXX to allow heavy customization of answerCall()
- Allow caller to enter his phone number and time of desired return call (aside
from CID)
- Blocking of messages via CID (if you don't want to receive messages from
particular callers, or area codes, etc.)
- VOICEMAIL
done - AREXX command when there are messages/faxes waiting (instead of just beeping)
done - Beep only if there is a new call (i.e. stop beeping when the person presses
Play messages). Use Archive to achieve this effect.
- Possibly add a comment field for messages (especially useful when
we put in the archiving facility)
done - silent modem
- when timedout during recording of call, perhaps mention to the
caller that they exceeded the max. recording time and can ask
them to press a key to record another message.
HISTORY
V1.19 - Fixed a bug in the arexx scripts. I inverted dropLine and atCommands.
- Fixed a bug (potential) that may cause ZVM to crash if you abort
the handlecall.zvm or handlesilentanswer.zvm.
- Fixed a bug that didn't cause playvoice to return any indication
of why it was aborted manually
V1.18 - Fixed a small bug that didn't allow you to decode an adpcm2 file and
then decode an adpcm3 file
- Switched to using a SendARexxMsg instead of a SendSynchronousARexxMsg
for doing the playamiga.zvm stuff.
- Turned on heavy optimization for adpcm2raw.c, hopefully making it
much faster.
- Added more arexx functions to deal with the modem (dropLine, atCommands,
use19200)
V1.17 - Using EASYSENDFUNCTION (for testing with duart.device) -- need to make
sure it still works 99% of the time with adpcm3 and 6.00 roms.
- Fixed a problem of playing back stuff when calling from the outside.
There may be a feedback path from an outgoing message back
to the modem's detection circuitry. So, a recorded voice file
may cause the modem to hear things like a fax tone or a DTMF
key press.
- Fixed the deletion of messages when accessing stuff from the outside (this
is in handlecall.zvm)
- 38400 for adpcm3. Need to make sure it still works. Otherwise,
switch back to 57600.
V1.16 - Now I save the path and file of the asl requester (but not across
ZVM invocations).
V1.15 - Added silent answer capability.
- Changed the way the sound is done again. Lance complained about
thrashing disks, so now I made a new assign required (voicetemp:).
This is where ZVM will put the temporary file it creates while
playing stuff on the amiga. You can assign voicetemp: to ram:t
if you think you'll have enough memory for the converted file.
Otherwise, putting it on your hard disk is fine too.
V1.14 - Added close serial port
- Changed to a different format for voice files (again). Sorry. But,
with the new format, playing is much safer (in terms of
interruptability). You can use the convertold program
to convert your old voicefiles to the new format.
- Renamed cliloadzvm to zvmandgpfax
- Removed cliloadzvmnofax. You can just run zvm directly
- You can now run zvm and zvmandgpfax from the workbench. Thanks to
Florian Keck for providing the icon.
V1.13 - Fixed the asl requester
- Fixed playamiga.zvm to handle files with spaces in them
V1.12 - LOTS OF NEW FEATURES
- Changed the way we play messages. We now use a standard IFF player.
But, it doesn't look as nice as before but is good enough for
now. I did this because someone complained about ZVM eating
too much memory when converting the compressed voice into
something playable (or IFF files). See the playamiga.zvm script.
Also note that when you click on Done in the Setup window,
the ARexx script 'clean.zvm' is run to clean up the voice:voices
directory of all the '.iff' files. The same thing is true of
the Done gadget after playing Saved or New messages. In that
case, the 'clean.zvm' script cleans up the voice:voicein
directory. This was needed so we don't have to keep track
of the '.iff' files we create when playing through the amiga
sound system. And, ZVM won't have to keep decoding and saving
the '.iff' file equivalents of the files you want to listen to.
- Now you can customize the handling of incoming calls. See the
handlecall.zvm script.
- Now you can customize the handling of incoming faxes. See the
handlefax.zvm script.
- You can customize the way ZVM alerts you of new messages or faxes. See
the alertmessages.zvm script.
- I removed the Message cycle gadget in the Setup window. You now
have to select the messages from an ASL file requester when
playing or recording. I need to put in dummy files (which
will not be playable) so that you don't have to manually type
in the file names of voice files our program expects.
V1.11 - Found a problem relating to closing down IDCMPs (I cached signal bits of
windows and closing down the IDCMP of a window caused those
signal bits to become invalid).
- Does not abort playing messages in the middle of a block. I also check
to make sure there are complete DLE DLE pairs (not just one pair
at the end, but possibly multiple pairs). This could be a good
reason to switch over to a zyxel format (where DLEs are not
stored in pairs and you have to decode it before sending it). That
would always send complete pairs of DLEs.
V1.10 - Made windows smaller
- Fixed some bugs when someone interrupts a playVoice by sending
a fax or pressing a key. It will send complete DLE DLE
pairs now.
V1.9 - Fixed some bugs with the Archived number status
- Changed timer code to not do a CheckIO, although I think it is safe.
But, someone reported that it crashes when this check is made.
Need to verify this.
V1.8 - Added all the nifty features above.
- Added Errors line
- Added Archive feature
- Added Rings, Comp, and To lines.
- Removed ability to change the "To" when playing messages. Everything
is from the Setup window now.
- ARexx commands for beeps and faxes
- Added silent modem. Issues an ATL0 when program starts up or when
it comes out of unlisten mode.
- Added record conv.
- Added '*' as an option to end a call. It doesn't say 'you entered a bad
choice' anymore.
- You can export a voice file to an iff file. There is also a CLI
utility to convert an iff file to a ZVM voice file (adpcm2 and adpcm3
only).
- Many more options for configuring the modem in the Setup Window
- Much nicer way to access the messages
V1.7 - Changed to a safer way of handling timer aborts
- Fixed a bug that didn't report TimedOut while recording
- Added '*' to mean TimedOut while recording a call or while playing
back messages through the phone line (external access).
V1.6 - Added back ADPCM3
- You can play ADPCM3 over the Amiga's speaker
- Fixed the bug that didn't allow you to record a message right after
playing it over the Amiga's speaker
- ZVM uses different serial port speeds depending on the compression
ratio. I'm not sure if this will make ADPCM3 or CELP work better.
- Uses different block sizes for different compressions also
V1.5 - Changed the interface to GPFax. It now just uses ARexx instead of
trying to do the AT+FCLASS=2, blah blah blah. This requires
two changes to the GPFax settings though. You need to remove
the &F part of the modem initialization string. This is the first
step towards making the program OTHER-FAX-friendly.
- Added cliloadzvmnofax
- Added back ADPCM3. You can record in it and play it back through the
Amiga sound system. I still can't figure out how to make it play
back reliably over the modem speaker or telephone line.
V1.4 - Added amiga volume parameter
- Hopefully more robust than 1.3
- Watch the status line of the main window for some error messages
V1.3 - Added playback through the Amiga's sound system
- Added adjustable silence sensitivity and interval. This is through
the CLI arguments. It's only a stopgap measure until I work
it into the GUI.
- Added adjustable recording time. Also a stopgap measure until I work
it into the GUI.
- Had to make all the arguments to the program REQUIRED because I was
too lazy to have to parse it.
V1.2 - Fixed some bugs and made serial routines faster
- I declare ADPCM3 to not be working. Don't use it.
- Changed the way callers are handled. Should be friendlier to the caller
now.
- Puts up a window if it can't open the timers or the serial port
instead of writing to stdout
- Now displays the version number on the main window
- Basically a name change to ZVM instead of VM
V1.1
- Added a different window for Unlisten mode
- You can now quit in unlisten mode -- you're not stuck there anymore
- New arguments for starting the program:
zvm [NOFAX] [devicename unitnumber]
If you start the program with NOFAX (note the capitals),
the program will not answer faxes. The caller cannot select
'2' from the initial menu to force a fax. In other words,
the handling of faxes will be disabled by this argument.
- Added zoom gadget and moved some stuff around in the UI -- when
you click in the zoom gadget, you get a semi-iconized
form (actually, it just shrinks the window) which shows
you the # of incoming calls and faxes. Note that this is
just a resized window, so you can type in keys to access
the functionality without zooming out. For example, you
can press the 's' key to access the setup window.
- GPFax needs to be set on SHARED serial for this combo to work.